diff --git a/reports/opendmarc-import.8.in b/reports/opendmarc-import.8.in
index 8f55848..4e854ac 100644
--- a/reports/opendmarc-import.8.in
+++ b/reports/opendmarc-import.8.in
@@ -12,8 +12,6 @@ reads per-message data recorded by an instance of
 and inserts it into an SQL database, for later use by
 .B opendmarc-reports(8)
 to generate aggregate reports.
-
-Records are read from standard input.
 .SH OPTIONS
 .TP
 .I --dbhost=hostname
@@ -44,6 +42,9 @@ the environment variable is not set.
 .I --help
 Prints a help message and terminates.
 .TP
+.I --input=file
+Reads from the named file instead of from standard input (the default).
+.TP
 .I --verbose
 Increase the amount of verbosity written to standard output.
 .TP
diff --git a/reports/opendmarc-import.in b/reports/opendmarc-import.in
index 5a28f2f..cccbace 100755
--- a/reports/opendmarc-import.in
+++ b/reports/opendmarc-import.in
@@ -35,11 +35,14 @@ my $def_dbuser    = "opendmarc";
 my $def_dbpasswd  = "opendmarc";
 my $def_dbport    = "3306";
 my $def_interval  = "86400";
+my $def_inputfh   = *STDIN;
 my $dbhost;
 my $dbname;
 my $dbuser;
 my $dbpasswd;
 my $dbport;
+my $inputfile;
+my $inputfh;
 
 my $dbscheme     = "@SQL_BACKEND@";
 
@@ -326,6 +329,7 @@ sub usage
 	print STDERR "\t--dbpasswd=passwd  database password [$def_dbpasswd]\n";
 	print STDERR "\t--dbport=port      database port [$def_dbport]\n";
 	print STDERR "\t--dbuser=user      database user [$def_dbuser]\n";
+	print STDERR "\t--input=file       input file [STDIN]\n";
 	print STDERR "\t--help             print help and exit\n";
 	print STDERR "\t--verbose          verbose output\n";
 	print STDERR "\t--version          print version and exit\n";
@@ -337,6 +341,7 @@ my $opt_retval = &Getopt::Long::GetOptions ('dbhost=s' => \$dbhost,
                                             'dbpasswd=s' => \$dbpasswd,
                                             'dbport=s' => \$dbport,
                                             'dbuser=s' => \$dbuser,
+                                            'input=s' => \$inputfile,
                                             'help!' => \$helponly,
                                             'verbose!' => \$verbose,
                                             'version!' => \$showversion,
@@ -428,6 +433,24 @@ if ($verbose)
 	print STDERR "$progname: started at " . localtime() . "\n";
 }
 
+
+if (!defined($inputfile))
+{
+	$inputfh = $def_inputfh;
+}
+else
+{
+	open($inputfh, "<", $inputfile) or die "$progname: unable to open $inputfile: $!\n";
+	if ($verbose)
+	{
+		print STDERR "$progname: opened file $inputfile\n"
+	}
+}
+if (!flock($inputfh, LOCK_SH))
+{
+	print STDERR "$progname: warning: unable to establish read lock\n";
+}
+
 my $dbi_dsn = "DBI:" . $dbscheme . ":database=" . $dbname .
               ";host=" . $dbhost . ";port=" . $dbport;
 
@@ -447,13 +470,10 @@ if ($verbose)
 # Read history file from stdin.
 #
 
+	
 $lineno = 0;
-if (!flock(STDIN, LOCK_SH))
-{
-	print STDERR "$progname: warning: unable to establish read lock\n";
-}
 
-while (<STDIN>)
+while (<$inputfh>)
 {
 	$lineno++;
 
@@ -592,6 +612,10 @@ if (defined($jobid))
 	update_db();
 }
 
+if (defined($inputfile))
+{
+	close($inputfh);
+}
 #
 # all done!
 #
